Hypertext Transfer Protocol (HTTP) adaptive streaming (HAS) clients are designed to provide the best quality experience to end users by exploiting the greedy nature of TCP's flow and congestion control capabilities. In HAS, the video content is encoded at several bitrates with associated quality levels, where each quality level is broken up into segments (often referred to as chunks or fragments as well) usually between two and ten seconds. This gives the client the ability to choose a quality level based on measurements of the available bandwidth on the path between the client and server and revise this decision as the network bandwidth changes or fluctuates. There may also be other factors that might affect client's decisions.
When starting to fetch a new video stream (e.g., following a channel change, a playback position change or a fast forward/rewind operation), the client has to manage a fundamental tradeoff between beginning playback quickly, presenting “high quality” video and building a sufficient playout buffer depth to prevent player stalls in the event of a drop in network bandwidth.